/**
 * Copyright (c) 2023 murenchao
 * taomu is licensed under Mulan PubL v2.
 * You can use this software according to the terms and conditions of the Mulan PubL v2.
 * You may obtain a copy of Mulan PubL v2 at:
 *       http://license.coscl.org.cn/MulanPubL-2.0
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PubL v2 for more details.
 */
package cool.taomu.toolkit.utils

import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType
import net.sourceforge.pinyin4j.PinyinHelper
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination

class ChineseToPinyin {
	def static toPinyin(String chinese) {
		val format = new HanyuPinyinOutputFormat();
		format.caseType = HanyuPinyinCaseType.LOWERCASE;
		format.toneType = HanyuPinyinToneType.WITHOUT_TONE;

		val buffer = new StringBuffer();
		var chars = chinese.toCharArray;
		chars.forEach [
			if (!Character.isWhitespace(it)) {
				if (it >= '\u4e00' && it <= '\u9fa5') {
					try {
						var pinyinArray = PinyinHelper.toHanyuPinyinStringArray(it, format);
						buffer.append(pinyinArray.get(0));
					} catch (BadHanyuPinyinOutputFormatCombination e) {
						e.printStackTrace();
					}
				} else {
					buffer.append(it);
				}
			}
		]
		return buffer.toString();
	}
}
